/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package org.merak.core.text;

import org.merak.core.text.lang.json.ArrayJsonfier;
import org.merak.core.text.lang.json.CharacterJsonfier;
import org.merak.core.text.lang.json.EnumJsonfier;
import org.merak.core.text.lang.json.EnumerationJsonfier;
import org.merak.core.text.lang.json.IterableJsonfier;
import org.merak.core.text.lang.json.MapJsonfier;
import org.merak.core.text.lang.json.ObjectJsonfier;
import org.merak.core.text.lang.json.StringJsonfier;
import org.merak.core.text.template.TemplateMap;

/**
 * Copyright © 2010-2012 Merak Computing. All rights reserved.<br><br>
 *
 * Methods and declarations for ObjectJSON.
 *
 * @author fmarinho.
 * @version 1.00.00 - Jul 20, 2012 - fmarinho - initial version.
 *
 * @since MerakCore 1.00.00
 */
public final class ObjectJSON {

	//~ Attributes ///////////////////////////////////////////////////////////////
	//****************************************************************************
	private static final TemplateMap templates  = new TemplateMap();
	private static final Control  controller = new Control();

	//~ Constructor //////////////////////////////////////////////////////////////
	//****************************************************************************
	static {

		controller.getTextifiers()
		.setObjectTextifier     ( new ObjectJsonfier()      )  // Object type
		.setStringTextifier     ( new StringJsonfier()      )  // Raw Type
		.setCharacterTextifier  ( new CharacterJsonfier()   )  // Raw Type
		.setEnumTextifier       ( new EnumJsonfier()        )  // Raw Type
		.setArrayTextifier      ( new ArrayJsonfier()       )  // Collection Type
		.setIterableTextifier   ( new IterableJsonfier()    )  // Collection Type
		.setEnumerationTextifier( new EnumerationJsonfier() )  // Collection Type
		.setMapTextifier        ( new MapJsonfier()         ); // Collection Type

	}

	//~ Methods //////////////////////////////////////////////////////////////////
	//****************************************************************************
	public static String toJson(Object o) {

		try {
			Context context = Context.getInstance(controller, templates);
			context.textify(o);
			return context.readAndClear();
		}
		catch (Exception ex) {
			throw new RuntimeException(ex);
		}

	}
	//****************************************************************************

}
